Секция [CopyFiles]
Секции [CopyFiles] имеют уникальные для INF файла названия, ссылки на них исходят из директив CopyFiles секций [DDInstall]. Соответственно, конкретные имена этих секций определяет сам разработчик inf-файла.
Каждая запись внутри секции [CopyFiles] имеет вид
destination-filename[, source-filename][, temp-filename][, flag]
где destination-filename является целевым (то есть новым, конечным) именем файла после копирования. Предполагается, что и исходный файл имеет такое же имя. В том случае, если исходный файл все-таки называется иначе, необходимо указать source-filename. Требование указывать temp-filename
все еще требуется для Windows 98/Me, и это поле вводит промежуточное имя для нового файла до момента первой перезагрузки системы. В Windows 2000/XP/2003 это значение игнорируется.
Таблица 12.5. Определение значения flag
в записях секции [CopyFiles]
Значение | Символьное имя | Описание | |
0x0400 | COPYFLG_REPLACEONLY | Копировать исходный файл только в том случае, если в целевой директории есть файл с таким именем | |
0x0800 | COPYFLG_NODECOMP | Копировать без разархивации (если файл обработан архиватором) | |
0x0008 | COPYFLG_FORCE_FILE_IN_USE | Если файл с целевым именем в целевой директории сейчас открыт, то следует копировать исходный файл в файл с временным именем, форсировать перезагрузку, после чего переименовать временный файл | |
0x0010 | COPYFLG_NO_OVERWRITE | Не переписывать существующие одноименные файлы в целевой директории | |
0x1000 | COPYFLG_REPLACE_BOOT_FILE | Файл является частью системной загрузки, форсировать перезагрузку системы | |
0x2000 | COPYFLG_NOPRUNE | Осуществить копирование, даже если инсталлятор не считает эту операцию целесообразной | |
0x0020 | COPYFLG_NO_VERSION_DIALOG | Не переписывать одноименные существующие файлы, которые датированы как более новые, нежели предназначенные к записи (игнорируется, если инсталлируемый пакет имеет цифровую подпись) | |
0x0004 | COPYFLG_NOVERSIONCHECK | Всегда переписывать целевые файлы (флаг игнорируется, если инсталлируемый пакет имеет цифровую подпись) | |
0x0040 | COPYFLG_OVERWRITE_OLDER_ONLY | Переписывать только те существующие файлы, которые являются более старыми, чем имеющиеся в пакете (данный флаг игнорируется, если инсталлируемый пакет имеет цифровую подпись) | |
0x0001 | COPYFLG_WARN_IF_SKIP | Предупреждать пользователя о возникшей необходимости пропустить переписывание файл (игнорируется, если инсталлируемый пакет имеет цифровую подпись) | |
0x0002 | COPYFLG_NOSKIP | Запретить пользователю выбор возможности пропуска каких-либо файлов при копировании (всегда применяется, если инсталлируемый пакет имеет цифровую подпись) |
Значение flag определяет управление новым целевым файлом, что подробнее отражено в таблице 12.5. Для описания сложного управления необходимо выполнять ИЛИ над операндами — для получения одновременного воздействия указываемых вариантов. Некоторые варианты взаимно исключают друг друга (например, COPYFLG_WARN_IF_SKIP и COPYFLG_NOSKIP), поэтому следует в сомнительных ситуациях обратиться к документации.
Так как секции [CopyFiles] не имеют синтаксических средств указывать диск или полный путь к исходному файлу, то следует использовать другие секции, такие как [SourceDisksNames] и [SourceDisksFiles]. Место (конкретные файловые каталоги), куда файлы будут помещены в результате установки, определяется другой секцией, называемой [DestinatonDirs].
Следует отметить, что здесь секция [CopyFiles] описывается, как присутствующая в inf-файле по той причине, что на нее ссылалась директива CopyFiles
из секции [DDInstall]. На самом деле, директива CopyFiles
может присутствовать и в секции [ClassInstall32], которая посвящена инсталляции нового класса устройств в системе (будет рассмотрена ниже). Вводимая таким образом секция [CopyFiles] должна быть построена по таким же правилам, как указано здесь.